package controleur;

import java.awt.Dimension;
import java.util.ArrayList;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import vue.Panneau_Client;

import modele.CarnetDeCommandes;
import modele.Commande;
import modele.ItemMenu;
import modele.ItemDansCommande;
import modele.Restaurant;

public class EnregistrerCommande {
	
	private static Commande commandeTemp;
	
	/**
	 * Démarre la commande et ouvre le panneau du client
	 * @param adresse - String
	 * @return Le panneau du client - Panneau_Client
	 */
	public static JPanel demarrerCommande(String adresse) {
		final Panneau_Client panneau = new Panneau_Client(new Dimension(600, 300), adresse);
		commandeTemp = new Commande(null, null, null);
		commandeTemp.addObserver(panneau);
		return panneau;
	}
	
	/**
	 * Termine la commande en cours et l'ajoute au carnet de commandes
	 * @param dateLivraison - String
	 * @param heureLivraison - String
	 * @param adresseLivraison - String
	 * @return Le numéro de confirmation de la commande - int
	 */
	public static int terminerCommande(String dateLivraison, String heureLivraison, String adresseLivraison) {
		Commande tempCommande = new Commande(dateLivraison, heureLivraison, adresseLivraison);
		tempCommande.setListeRestaurantCommande(commandeTemp.getListeRestaurantCommande());
		commandeTemp = new Commande(null, null, null);
		return CarnetDeCommandes.getInstance().ajouter(tempCommande);
	}
	
	/**
	 * Ajoute un item à la commande en cours
	 * @param item - ItemMenu
	 * @param quantite - int
	 * @param restaurant - Restaurant
	 */
	public static void ajouterItem(ItemMenu item, int quantite, Restaurant restaurant) {
		commandeTemp.addItemCommande(item, quantite, restaurant);
	}
	
	/**
	 * Retire un item de la commande en cours
	 * @param item - ItemMenu
	 * @param quantite - int
	 * @param restaurant - Restaurant
	 */
	public static void retirerItem(ItemMenu item, int quantite, Restaurant restaurant) {
		commandeTemp.removeItemCommande(item, quantite, restaurant);
	}
	
	/**
	 * Retourne la liste des items de la commande en cours
	 * @return La liste des items - ArrayList<ItemsDansCommande>
	 */
	public static ArrayList<ItemDansCommande> getListeItems() {
		return commandeTemp.getListeItems();
	}
	
	/**
	 * Affiche la facture de la commande en cours
	 * Conclue la commande en cours
	 * @param date - String
	 * @param heure - String
	 * @param adresse - String
	 */
	public static boolean afficherFacture(String date, String heure, String adresse) {
		boolean commandeTermine = false;
		JPanel leThis = new JPanel();
		JTextField textFieldAdresse = new JTextField(adresse);
		if (commandeTemp.getListeItems().size() > 0) {
			textFieldAdresse.setText(adresse);
			
		//	String texte = commandeTemp.getRestaurant().getNom()+"\n\n";
			String texte = "\n\n";
			float prixTotal = 0;
			for (ItemDansCommande item : commandeTemp.getListeItems()) {
				
				texte += "$ "+(float)item.getQuantite()*item.getItem().getPrix()+
							" ("+item.getQuantite()+")"+
							" "+item.getItem().getNom()+"\n";
				
				prixTotal += item.getQuantite()*item.getItem().getPrix();
			}
			texte += "\nPrix total: "+prixTotal+" $"+
					"\n\n au "+adresse+
					"\n à "+heure+" le "+date+
					"\n\nAcceptez-vous cette commande?";
			
			int confirmation = JOptionPane.showConfirmDialog(leThis, texte, "Confirmation", 0, 2);
			if (confirmation == 0) {
				JOptionPane.showMessageDialog(leThis, "Veuillez prendre en note votre numéro de confirmation:\n"+
						terminerCommande(date, heure, adresse));
				commandeTermine = true;
			}
		} else {
			JOptionPane.showMessageDialog(leThis, "Il doit y avoir au moins un item dans la commande.");
		}
		return commandeTermine;
	}
}